package com.itheima.test5;

import java.io.*;

/**
 * @Author:gy
 * @Date: 2025/08/31 15:09
 * @Description:
 */
public class Demo1 {
    public static void main(String[] args) throws Exception {
        /*
        如果我们想要这个类能被序列化,那么这个类需要实现一个接口Serializable
        Serializable接口的意义  标记接口  这里面没有任何抽象方法
        只要我们的类实现了这个接口 那么就可以被序列化
        * */
       //menthod1();
        //反序列化  读
        menthod2();
    }

    private static void menthod1() throws IOException {
        /*
          如果我们自己没有定义序列化版本号,虚拟家在我们序列化的时候会根据类中的信息计算出一个序列化号
          如果我们修改了类中的信息,那么虚拟机会再次计算出一个序列化号
          第一次:58L
          第二次:45L
          两次序列化和反序列化号不一样,就会报错
          我们就不让系统自动取计算,我们手动给出一个序列化号,不管类中的信息有没有改变
          序列化和反序列号都是一样的  就可以正常的进行序列化和反序列化
          transient:让被修饰的属性不被序列化
        * */
        User user = new User("小帅","123456",28);
        //将对象序列化  将对象转化为字节流存储到硬盘  写的
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Day11\\f.txt"));
        oos.writeObject(user);
        oos.close();
    }

    private static void menthod2() throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Day11\\f.txt"));
        User o = (User)ois.readObject();
        System.out.println(o);
        ois.close();
    }
}
